ELK告警插件-elastalert2 实践,支持elk8.0版本,企微机器人告警实现
最近刚把生产的ELK搭建完成,前面文章也有介绍,然后就在思考把日志监控告警也做起来,因为人力问题,既要处理生产问题,又要做一些日常运维工作,所以日志监控的调研和完成就放在周末来做了。
简单说下,目前的运维现状,运维部门是新建立的,之前都是研发自管的,各自玩各自的,所以有蛮多的问题,有很多非标的建设,其实这种是很痛苦,最近在做的话,就是梳理不同的系统。
基本就是从0到1的建设吧,之前在建设elk的时候,其实也有考虑过,后续的日志监控要怎么做,本来最初的想法是自己去写,但是时间来不及,也没有那么多的精力去做这些事。
在很早之前的话,是有用过一些插件的,elasticalert,sentinl,前者的话,很早之前就不更新了,后者的话,目前也是只支持到7版本,所以就看到了elastalert2,看了下最新的更新是在近期,而且文档也很完善,虽然都是英文。
elastalert2参考资料:
文档:https://elastalert2.readthedocs.io/en/latest/index.html
github地址:https://github.com/jertel/elastalert2
这个插件的话,是支持docker部署及k8上部署的,相关的docker file及helm文件都有提供,基本是开箱即用了。
我这里是直接用本地python起的,有docker或者k8需求的,可以自己去看下。
所需软件及版本:
python 3.10
opensll 1.1.1 (python 3.10需要)
安装python的话,这里就不细讲了
安装步骤:
pip install elastalert2 (可能会有setuptools版本低的情况,自行更新)
git clone https://github.com/jertel/elastalert2.git
python setup.py install
两个配置文件:
一个是基础配置,在examples下面有基础配置
#必须配置项
#告警规则目录
rules_folder: examples/rules
run_every:
minutes: 1
buffer_time:
minutes: 15
es_host: es ip
es_port: 9200
#非必须配置
#因为我是开启了鉴权的,所有需要开启ssl认证
use_ssl: True
es_username: user
es_password: passwd
ca_certs: ./http_ca.crt
#会建立一个对应d的索引,后面可以直接去建立
writeback_index: elastalert_status
#retry window for failed alerts.
alert_time_limit:
days: 2
然后就是告警规则的配置了
默认是在examples下面的rules文件夹下,已经有蛮多的基础配置了,可以根据需要去配置,我这里配置了一个frequency类型的作为测试。
frequency这种类型的话,更符合日常的一个告警措施,可以根据时间范围内,出现的次数进行预警。
支持蛮多的告警途径,可以看下官方的介绍,我这里用到的是post途径,然后对数据进行处理,通过企微机器人进行告警,之前的prometheus也是通过这个告警的,数据格式不同,做了下处理。
支持的告警途径:
关于rule的配置可以看下:
#可以针对字段做一些添加,这个策略的话,就是30分钟内出现50次404就告警
#query 也可以根据一些实际的需求进行调整
#而且支持多个rule配置文件
name: "Exemple webhook alert"
type: frequency
index: ng*
use_strftime_index: true
filter:
- query:
query_string:
query: "status: 404"
num_events: 50
timeframe:
hours: 0.5
realert:
minutes: 0
include: ["time_local","fields.host_ip"]
alert_text: "Alerts at {0} on the host {1}.\n```"
alert_text_args: ["timestamp","status"]
alert: post
http_post_url: "http://192.168.200.9:5001"
在启动之前,需要做一个index的初始化,直接执行:
如果开了鉴权的,也可以做个测试,是否可以连通elasticsearch
$elastalert-create-index
New index name (Default elastalert_status)
Name of existing index to copy (Default None)
New index elastalert_status created
Done!
rule配置文件准备好的,也可以做个测试,检测配置文件是否正常
通过如下命令可以完成:
#这个命令也可以通过 -h 然后帮助
#这条命令只是检测配置文件是否正常
#如果要确认是告警是否能触发的话,需要加 --alert
elastalert-test-rule ./examples/rules/exemple_discord_any.yaml --config=./examples/config.yaml
其实在最开始我测试的时候,一直报0hit,其实是索引配置的有点问题,可以自己去多测试几次。
就是这个问题,不过这个回答,也只是建议
当你加了--alert去测试的时候,如果有匹配到的,那么就可以触发告警了,类似这样
企微机器人上实际的效果是这样的:
当然了,告警里面的一些字段的话,可以自己去定义,这个只是一个初版,整个路走通了。
后面的话,可能就是具体的一些日志关键字,增加告警恢复的策略等,后面有时间的话,再来更新下。